﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

namespace HeathCareSystem.Tier.DAO
{
    public class ChiTietBenhAnDAO
    {
        static DataProvider dp = new DataProvider();

        /// <summary>
        /// Tạo danh sách đối tượng
        /// </summary>
        /// <param name="strSQL">Câu lệnh truy vấn</param>
        /// <returns>Danh sách chi tiết bệnh án</returns>
        protected static List<ChiTietBenhAnDTO> TaoDanhSach(String strSQL)
        {
            List<ChiTietBenhAnDTO> lst = new List<ChiTietBenhAnDTO>();
            try
            {
                DataTable dt = new DataTable();
                dt = dp.ExecuteQuery(strSQL);
                foreach (DataRow dr in dt.Rows)
                {
                    ChiTietBenhAnDTO ctba = new ChiTietBenhAnDTO();
                    ctba.maChiTietBenhAn = int.Parse(dr["MaChiTietBenhAn"].ToString());
                    ctba.maBenhNhan = dr["MaBenhNhan"].ToString();
                    ctba.ngayKham = DateTime.Parse(dr["NgayKham"].ToString());
                    ctba.trieuChung = dr["TrieuChung"].ToString();
                    ctba.ketLuan = dr["KetLuan"].ToString();
                    if (!dr["NgayTaiKham"].ToString().Equals(""))
                    {
                        ctba.ngayTaiKham = DateTime.Parse(dr["NgayTaiKham"].ToString());
                    }
                    else
                        ctba.ngayTaiKham = new DateTime(0001, 01, 01);
                    if (!dr["BacSi"].ToString().Equals(""))
                    {
                        ctba.maNguoiDung = dr["BacSi"].ToString();
                    }
                    lst.Add(ctba);
                }
            }
            catch (Exception)
            {
                lst = null;
            }
            return lst;
        }

        /// <summary>
        /// Danh sách chi tiết bệnh án
        /// </summary>
        /// <returns></returns>
        public static List<ChiTietBenhAnDTO> DanhSach()
        {
            String strSQL = "SELECT * FROM ChiTietBenhAn";
            return TaoDanhSach(strSQL);
        }

        /// <summary>
        /// Lấy thông tin từ Mã
        /// </summary>
        /// <param name="Ma"></param>
        /// <returns></returns>
        public static ChiTietBenhAnDTO LayThongTinTuMa(int Ma)
        {
            String strSQL = String.Format("SELECT * FROM ChiTietBenhAn WHERE MaChiTietBenhAn = {0}", Ma);
            return TaoDanhSach(strSQL)[0];
        }

        /// <summary>
        /// Lấy thông tin từ Mã Bệnh Nhân
        /// </summary>
        /// <param name="Ma"></param>
        /// <returns></returns>
        public static ChiTietBenhAnDTO LayThongTinTuMaBenhNhan(string Ma)
        {
            String strSQL = String.Format("SELECT * FROM ChiTietBenhAn WHERE MaBenhNhan = '{0}'", Ma);
            
            return TaoDanhSach(strSQL)[0];
        }

        
        /// <summary>
        /// Lấy thông tin từ Mã Bệnh Nhân
        /// </summary>
        /// <param name="Ma"></param>
        /// <returns></returns>
        public static ChiTietBenhAnDTO LayThongTinChiTietBenhAnMoi()
        {
            ChiTietBenhAnDTO ctba = new ChiTietBenhAnDTO();
            String strSQL = String.Format("SELECT TOP (1) MaChiTietBenhAn, MaBenhNhan, NgayKham, TrieuChung, KetLuan, NgayTaiKham, BacSi "+
                                          " FROM ChiTietBenhAn "+
                                          " ORDER BY MaChiTietBenhAn DESC");
            DataTable dt = dp.ExecuteQuery(strSQL);
            foreach (DataRow dr in dt.Rows)
            {                
                ctba.maChiTietBenhAn = int.Parse(dr["MaChiTietBenhAn"].ToString());
                ctba.maBenhNhan = dr["MaBenhNhan"].ToString();
                ctba.ngayKham = DateTime.Parse(dr["NgayKham"].ToString());
            }
            return ctba;
        }
        /// <summary>
        /// Thêm chi tiết bệnh án
        /// </summary>
        /// <param name="ctba">Class ChiTietBenhAnDTO</param>
        /// <returns>Boolean</returns>
        public static bool Them(ChiTietBenhAnDTO ctba)
        {
            try
            {
                string strSQL = string.Format("INSERT INTO ChiTietBenhAn(MaBenhNhan, NgayKham, TrieuChung, KetLuan, NgayTaiKham, BacSi)" +
                                            " VALUES ('{0}', '{1}', N'{2}', N'{3}', '{4}', '{5}')",
                                            ctba.maChiTietBenhAn, ctba.maBenhNhan, ctba.ngayKham, ctba.trieuChung, ctba.ketLuan, ctba.ngayTaiKham, ctba.maNguoiDung);
                dp.ExecuteNonQuery(strSQL);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// Thêm chi tiết bệnh án
        /// </summary>
        /// <param name="ctba">Class ChiTietBenhAnDTO</param>
        /// <returns>Boolean</returns>
        public static bool KhoiTaoChiTietBenhAn(ChiTietBenhAnDTO ctba)
        {
            try
            {
                string strSQL;
                if (ctba.maNguoiDung == null)
                    strSQL = string.Format("INSERT INTO ChiTietBenhAn(MaBenhNhan, NgayKham)" +
                                            " VALUES ('{0}', '{1}')",
                                            ctba.maBenhNhan, ctba.ngayKham);
                else
                    strSQL = string.Format("INSERT INTO ChiTietBenhAn(MaBenhNhan, NgayKham, BacSi)" +
                                            " VALUES ('{0}', '{1}', '{2}')",
                                            ctba.maBenhNhan, ctba.ngayKham, ctba.maNguoiDung);
                dp.ExecuteNonQuery(strSQL);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// Cập nhật chi tiết bệnh án
        /// </summary>
        /// <param name="ctba"></param>
        /// <returns></returns>
        public static bool CapNhat(ChiTietBenhAnDTO ctba)
        {
            try
            {
                String strSQL = String.Format("UPDATE ChiTietBenhAn SET MaBenhNhan = '{0}', " +
                                                "NgayKham = '{1}', TrieuChung = N'{2}', " +
                                                "KetLuan = N'{3}', NgayTaiKham = '{4}', " +
                                                "BacSi = '{5}' WHERE MaChiTietBenhAn = {6}"
                                                , ctba.maBenhNhan, ctba.ngayKham, ctba.trieuChung, ctba.ketLuan, ctba.ngayTaiKham, ctba.maNguoiDung, ctba.maChiTietBenhAn);
                dp.ExecuteNonQuery(strSQL);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        public static bool KiemTraTonTai(int ma)
        {
            string strSQL = string.Format("SELECT COUNT(MaChiTietBenhAn) AS COUNT FROM ChiTietBenhAn " +
            " WHERE (MaChiTietBenhAn = {0})", ma);
            int kq = int.Parse(dp.ExecuteScalar(strSQL).ToString());
            return kq > 0;
        }
        /// <summary>
        /// Xóa chi tiết bệnh án
        /// </summary>
        /// <param name="Ma">int</param>
        /// <returns>Boolean</returns>
        public static bool Xoa(int Ma)
        {
            try
            {
                String strSQL = string.Format("DELETE FROM ChiTietBenhAn WHERE MaChiTietBenhAn = {0}", Ma);
                dp.ExecuteNonQuery(strSQL);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
    }
}